#define  _CRT_SECURE_NO_WARNINGS

//#include "ObjectPool.h"
//
//int main()
//{
//	//std::cout << sizeof(void*) << std::endl;
//	ObjectPool<int> pool;
//
//	int N = 10000;
//	std::vector<void*> v;
//	for (int i = 0; i < N; i++)
//	{
//		void* ptr = pool.New();
//		v.push_back(ptr);
//	}
//
//	for (int i = 0; i < N; i++)
//	{
//		pool.Free(v[i]);
//	}
//	return 0;
//}

#include "ConcurrentAlloc.h"

void Thread1()
{
	std::vector<void*> v;
	int n = 5;
	for (int i = 0; i < 5; i++)
	{
		void* p = ConcurrentAlloc(6);
		v.push_back(p);
	}
	
	for (int i = 0; i < 5; i++)
	{
		ConcurrentFree(v[i]);
	}
}

void Thread2()
{
	std::vector<void*> v;
	int n = 5;
	for (int i = 0; i < 5; i++)
	{
		void* p = ConcurrentAlloc(33 * 8 * 1024);
		v.push_back(p);
	}

	for (int i = 0; i < 5; i++)
	{
		ConcurrentFree(v[i]);
	}
}

void Test1()
{
	std::thread t1(Thread1);
	std::thread t2(Thread2);

	t1.join();
	t2.join();
}

void Test2()
{
	std::vector<void*> v;
	int n = 5;
	for (int i = 0; i < 5; i++)
	{
		void* p = ConcurrentAlloc(33 * 8 * 1024);
		v.push_back(p);
	}

	for (int i = 0; i < 5; i++)
	{
		ConcurrentFree(v[i]);
	}
}

//int main()
//{
//	Test1();
//	//Test2();
//	return 0;
//}